import { NextResponse } from 'next/server'
import { AiScript } from '@/types/Model'
import prisma from '@/lib/prisma'
import { OpenAI } from "openai";
import { getUser } from '@/lib/authUtils';

const openai = new OpenAI({
    baseURL: 'https://api.deepseek.com',
    apiKey: process.env.OPENAI_API_KEY,
});

export async function POST(req: Request): Promise<NextResponse> {
  try {
    const userid = await getUser(req)
    if (!userid) {
      return NextResponse.json(
        { error: '未授权或登录信息过期，请登录' },
        { status: 401 }
      )
    }
    if (userid instanceof NextResponse) {
      return userid
    }
    const { searchParams } = new URL(req.url)
    const copy_id = searchParams.get('copy_id')
    
    if (!copy_id) {
      return NextResponse.json({ error: 'Copy ID is required' }, { status: 400 })
    }

    // Get copy rich content
    const copy = await prisma.vms_copy.findUnique({
      where: {
        id: copy_id,
      },
      select: {
        rich_content: true
      }
    })

    await prisma.vms_user.update({
      where: { id: userid },
      data: {
        ai_count: {
          increment: 1
        }
      }
    });

    if (!copy || !copy.rich_content) {
      return NextResponse.json({ error: 'Copy not found' }, { status: 404 })
    }

    // Parse rich content to generate scripts
    const richContent = copy.rich_content

    const systemPrompt = `你是一个专业的顶级Youtuber，能够创建有吸引力的视频。请根据提供的内容生成至少20个视频脚本。

   - 脚本结构：Hook（0-3s）+ Value（4-12s）+CTA（13-15s）
   - 钩子密度：每3秒一个悬念点（视觉/台词/音效）
   - 前3秒含矛盾词（但是/竟然/没想到）
   - 每句≤12字，每秒≤2.5个信息点
   - 结尾双CTA：主行动（订阅）+备选（点赞）

    每个脚本应包含以下信息：
    - caption: 口语化的分镜对白
    - content: 分镜描述（不超过30字）
    - location: 场景描述（不超过5字）
    - plot: 情节概述（不超过15字，格式：人物 + 动作）
    - shot_size: 拍摄大小（中景/近景/特写/远景）
    - shot_move: 镜头移动方式（固定/俯仰/横移/升降/跟随）
    - shot_angle: 拍摄角度（视平/俯拍/仰拍/斜拍/越肩）
    
    每个脚本时长应在5秒，内容应简洁有力。
    直接返回如下JSON 数组，案例如下：。

    {
    "scripts": 
            [
                {
                    "caption": "这手机充电速度竟然比咖啡机还快?!", // 含矛盾词
                    "content": "华为VS苹果并行充电对比实验...",
                    "location": "实验室",
                    "plot": "工程师测试设备",// 人物+动词
                    "shot_angle": "俯拍",
                    "shot_move": "跟随",
                    "shot_size": "中景"
                },
            ]
    }
    `;

    const userPrompt = `请根据以下内容生成脚本：\n\n${richContent}`;
    const completion = await openai.chat.completions.create({
      messages: [
        { role: "system", content: systemPrompt },
        { role: "user", content: userPrompt }
      ],
      model: "deepseek-chat",
      response_format: { type: 'json_object' },
      temperature: 1.4
    });

    const content = completion.choices[0].message.content;
    if (!content) {
      return NextResponse.json({ error: 'No content in completion response' }, { status: 500 })
    }
    
    const generatedScripts = JSON.parse(content);
    const scripts: AiScript[] = generatedScripts.scripts || [];

    return NextResponse.json({ scripts })
  } catch (error) {
    console.log('[SCRIPT_GENERATE]', error)
    return NextResponse.json({ error: 'Internal Error' }, { status: 500 })
  }
}
